package com.neusoft.mapper;

import java.sql.Date;
import java.util.List;

import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import com.neusoft.po.CalendarPO;
import com.neusoft.vo.CalendarVO;

/*
 * 数据库设置一年的默认日历（SQL语句）
 * 
 * 若已存在，先删除这个存储过程
 * DROP PROCEDURE IF EXISTS GenerateCalendar;

DELIMITER //

CREATE PROCEDURE GenerateCalendar(IN year INT)
BEGIN
  DECLARE currentDate DATE;
  DECLARE endDate DATE;
  SET currentDate = CONCAT(year, '-01-01');
  SET endDate = CONCAT(year, '-12-31');

  WHILE currentDate <= endDate DO
  	-- 跳过已经设置的日期，将未生成的日期生成并设置为默认日期类型
	IF NOT EXISTS (SELECT 1 FROM `calendar` WHERE `date` = currentDate)
		THEN
			IF DAYOFWEEK(currentDate) IN (1, 7) THEN
				-- 1：星期天，7：星期六
				INSERT INTO `calendar` (`date`, `date_type`) VALUES (currentDate, 2); -- 休息日
			ELSE
				INSERT INTO `calendar` (`date`, `date_type`) VALUES (currentDate, 1); -- 工作日
			END IF;
		END IF;
    SET currentDate = DATE_ADD(currentDate, INTERVAL 1 DAY);
  END WHILE;
END //

DELIMITER ;


//调用效果：为未生成的日期赋予默认假期类型，跳过已生成的日期的设置
//表中所有日期数据的生成均由该存储过程生成
CALL GenerateCalendar(2024);
 * 
 * */

public interface CalendarMapper {
	
	//生成某年度默认日历表
	@Select("CALL GenerateCalendar(#{id});")
	public Integer GenerateCalendar(Integer year);

	//获取某年度日历表
	@Select("SELECT * FROM calendar WHERE date BETWEEN #{start} AND #{end} ")
	public List<CalendarPO> getCalendar(CalendarVO vo);
	
	//更新对日历表的设置
	@Update("UPDATE calendar SET date_type = #{date_type} WHERE date = #{date} ")
	public Integer updateCalendar(CalendarPO po);
}
